﻿using System;
using SoftwareConsulting.BI11.NumericalMethods.Interfaces;

namespace SoftwareConsulting.BI11.NumericalMethods.Statistics
{    
    /// <summary>
    /// Класс нахождения обратной функции плотности вероятности
    /// </summary>
    public sealed class InversedProbabilityDensityFunction : IOneVariableFunction
    {    	
        private ProbabilityDensityFunction _probabilityDensity;//функция плотности
        private double _x;//значение, для которого ищем обратное

        /// <summary>
        /// Конструктор класса
        /// </summary>
        /// <param name="probabilityDensityFunction">функция плотности</param>
        /// <param name="x">значение, для которого ищем обратное</param>
        public InversedProbabilityDensityFunction(ProbabilityDensityFunction probabilityDensityFunction, double x)
        {
            _probabilityDensity = probabilityDensityFunction;
            _x = x;
        }

        /// <summary>
        /// Возвращает значение обратной функции плотности
        /// </summary>
        /// <param name="x"></param>
        /// <returns></returns>
        public double GetValue(double x)
        {
            return _probabilityDensity.GetDistributionValue(x) - _x;
        }
    }
}
